Skip to content

Ensure make -j uses a reasonable argument #1541

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Apr 18, 2025
Merged

Conversation

AA-Turner
Copy link
Member

@AA-Turner AA-Turner commented Apr 18, 2025

AA-Turner and others added 3 commits April 18, 2025 13:23
Co-authored-by: Hugo van Kemenade <[email protected]>
Co-authored-by: Hugo van Kemenade <[email protected]>
…imit on

the number of concurrent jobs, not "a sensible limit considering the
available memory and CPU cores". With LTO it's easy to run out of memory
when too many jobs run at the same time.
@AA-Turner
Copy link
Member Author

I've cherry-picked @Yhg1s's changes from #1543 into this branch, the question is if we want to suggest a static number (-j4) or use the number of CPU cores (-j $(nproc)).

@hugovk
Copy link
Member

hugovk commented Apr 18, 2025

Let's use $(nproc) so we can copy and paste and get something more useful. Many modern machines have much more than 4 cores; I have an 8 and a 10.

@@ -203,14 +203,13 @@ do to get a pydebug build of CPython.

Once ``configure`` is done, you can then compile CPython with::

$ make -s -j2
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that nproc is part of GNU coreutils and may not necessarily be available on all Unix-like systems (namely, macOS). So Mac users should first do brew install coreutils or use sysctl instead to get the number of physical or logical cores (I don't remember which one nproc returns)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've merged, as Hugo uses macOS and didn't complain, but we can open a follow-up if need be.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for pointing that out. I do have coreutils installed via Homebrew, which is why it worked for me. Let's not require or assume others do.

Shall we use a hardcoded value under the macOS tabs? Something like 8 feels like a good default?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TL;DR - this is good enough.

I feel like people who understand how to run make already understand what $(nproc) can be substituted with manually if they don't have the command. if we wanted to be ironic we'd suggest $(python3 -c 'import os; print(os.cpu_count())') to the person who is building python and may not yet have a built python3 (but realistically do anyways because all Linux distros offer it and macOS xcode comes with one). 😛

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like people who understand how to run make already understand what $(nproc) can be substituted with

That seems like a rash assumption to me; I would expect anyone with that level of comfort with make to not need to be walked through "run ./configure && make". There's also the point that make -j $(nproc) in the absense of a working nproc will leave the user with make -j , which is what we were trying to avoid with this change.

Copy link
Member

@picnixz picnixz Apr 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The assumption would be correct if we were in the extension-modules.rst file, but this file is for the "getting started". I don't think we should assume that the reader is extra familiar with make and even knows about nproc and co (this section would be read by newcomers I think).

By the way, nproc being part of coreutils and not necessarily available on macOS caused some issues in other projects: https://www.drupal.org/project/drupal/issues/3407360. So it's not necessarily a theoretical use case.

@AA-Turner AA-Turner merged commit f1b7e25 into python:main Apr 18, 2025
4 checks passed
@AA-Turner AA-Turner deleted the make-jobs branch April 18, 2025 19:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants